package com.localShare.activity;

import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;

import com.ipackage.ContentLoad;
import com.localShare.Common;
import com.localShare.Constant;
import com.localShare.R;
import com.localShare.load.MultipleImageLoad;
import com.util.ExtendedViewPager;
import com.util.Screen;
import com.util.SharedPreferencesUtil;
import com.util.WindowManagerUtil;

/**
 * 多图片加载显示类
 */
public class MultipleImageActivity extends BaseActivity{
    //SharedPreferences工具类
    private final SharedPreferencesUtil sharedPreferencesUtil=new SharedPreferencesUtil();
    //WindowManager工具类
    private final WindowManagerUtil windowManagerUtil=new WindowManagerUtil();
    //缩略图父容器
    private LinearLayout thumbImageLinearLayout;
    //缩略图父容器分割线
    private LinearLayout splitLine;
    //屏幕高度
    private int screenHeight;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //锁屏时也可显示
        windowManagerUtil.showWhenLocked(this);
        //加载布局
        setContentView(R.layout.activity_multiple_image);
        //全屏
        windowManagerUtil.fullScreen(this);
        //全图ViewPager
        ExtendedViewPager mViewPager = (ExtendedViewPager) findViewById(R.id.viewPager);
        //缩略图父容器
        LinearLayout thumbImageContainer=(LinearLayout) findViewById(R.id.thumbImageContainer);
        //水平滑动控件
        HorizontalScrollView horizontalScrollView=(HorizontalScrollView)findViewById(R.id.horizontalScrollView);
        //缩略图线性布局
        thumbImageLinearLayout=(LinearLayout)findViewById(R.id.thumbImageLinearLayout);
        //缩略图分割线
        splitLine=(LinearLayout)findViewById(R.id.splitLine);
        Screen screen=new Screen();
        //屏幕高度
        screenHeight=screen.getScreenHeight(this);

        //根据意图Flag判断是从Intent中取数据，还是从历史记录中取
        Intent intent=getIntent();
        int flag=intent.getFlags();
        switch(flag){
            //从Intent中取数据
            case Constant.COM_FROM_CURRENT:
                ContentLoad contentLoad=new MultipleImageLoad();
                //加载数据，保存数据
                contentLoad.load(this,new Object[]{mViewPager,thumbImageContainer,horizontalScrollView},intent);
                //多张图片加载，URIS保存放在了MultipleImageLoad的方法里
                //设置LAST_LOAD_FLAG为LAST_LOAD_MULTIPLE_IMAGE
                sharedPreferencesUtil.saveInt(this,Constant.PRIVATE_SHARED_PREFERENCE,Constant.LAST_LOAD_FLAG,Constant.LAST_LOAD_MULTIPLE_IMAGE);
                break;
            //从历史记录中取数据
            case Constant.COM_FROM_HISTORY:
                //读取数据
                String uriString=sharedPreferencesUtil.getString(this,Constant.PRIVATE_SHARED_PREFERENCE,Constant.MULTIPLE_IMAGE_URI,Constant.MULTIPLE_IMAGE_URI_INIT);
                //若不为空，则加载显示数据
                if(!Constant.MULTIPLE_IMAGE_URI_INIT.equals(uriString)){
                    MultipleImageLoad multipleImageLoad=new MultipleImageLoad();
                    multipleImageLoad.load(this,mViewPager,thumbImageContainer,uriString,horizontalScrollView);
                }
                break;
        }
    }

    /**
     * 在事件分发方法中，模拟单击事件，显示/隐藏缩略图
     * @param ev 事件
     * @return 事件分发处理结果
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        //缩略图显示时，缩略图栏不参与模拟
        if(Common.currentThumbImageShow&&(ev.getY()/screenHeight>0.8)){
            return super.dispatchTouchEvent(ev);
        }
        //按下事件，记录时间，X轴坐标
        if(ev.getAction()==MotionEvent.ACTION_DOWN){
            Common.currentDownTime=System.currentTimeMillis();
            Common.currentDownX=ev.getX();
        //抬起事件，记录时间，记录X轴偏移，记录两次抬起事件时间间隔。按下抬起时间短，连续两次抬起间隔长，X轴偏移小，则为单击事件
        }else if(ev.getAction()==MotionEvent.ACTION_UP){
            //按下，抬起间隔小于SINGLE_CLICK_TIME才会被判断为单击事件
            if(System.currentTimeMillis()-Common.currentDownTime<Constant.SINGLE_CLICK_TIME){
                //连续两次抬起大于DOUBLE_CLICK_TIME，并且按下、抬起X轴偏移小于X_SLIDE才能判定为单击事件
                if(System.currentTimeMillis()-Common.lastUpTime>Constant.DOUBLE_CLICK_TIME&&Math.abs(ev.getX()-Common.currentDownX)<Constant.X_SLIDE){
                    //如果缩略图显示，则隐藏缩略图布局和分割线
                    if(Common.currentThumbImageShow){
                        thumbImageLinearLayout.setVisibility(View.GONE);
                        splitLine.setVisibility(View.GONE);
                    //否则，显示缩略图布局和分割线
                    }else{
                        thumbImageLinearLayout.setVisibility(View.VISIBLE);
                        splitLine.setVisibility(View.VISIBLE);
                    }
                    //标识转换
                    Common.currentThumbImageShow=!Common.currentThumbImageShow;
                }
                //记录抬起时间，方便与下一次的抬起时间做比对，分析是否双击
                Common.lastUpTime=System.currentTimeMillis();
            }
        }
        //事件继续向下分发
        return super.dispatchTouchEvent(ev);
    }
}
